package st.shadow.library.ui.dialog;

import android.app.Dialog;
import android.content.Context;

import st.shadow.library.ui.dialog.sweet.SweetAlertDialog;


/**
 * @author zhangyu
 * @date 2018/3/8
 */

public class SweetDialog implements IDialog {
    private SweetAlertDialog mAlertDialog;
    private final Context mContext;

    SweetDialog(Context context) {
        mContext = context;
    }


    @Override
    public void showProgressDialog(boolean canCancel, String title, String msg) {
        if (mAlertDialog != null && mAlertDialog.isShowing()) {
            mAlertDialog.setTitleText(msg)
                    .showCancelButton(false)
                    .showContentText(false)
                    .changeAlertType(SweetAlertDialog.PROGRESS_TYPE);
        } else {
            mAlertDialog = new SweetAlertDialog(mContext, SweetAlertDialog.PROGRESS_TYPE)
                    .setTitleText(title)
                    .setContentText(msg);
            mAlertDialog.setCancelable(canCancel);
            mAlertDialog.show();
        }
    }

    @Override
    public void showProgressDialogWithCancel(String title, String msg, final IDialogClickListener clickListener) {
        mAlertDialog = new SweetAlertDialog(mContext, SweetAlertDialog.PROGRESS_TYPE)
                .setTitleText(title)
                .setCancelText("取消")
                .showContentText(!(msg == null || msg.isEmpty()))
                .setContentText(msg);
        mAlertDialog.setCancelable(true);
        mAlertDialog.show();
    }

    @Override
    public void changeText(String title, String msg) {
        if (mAlertDialog != null && mAlertDialog.isShowing()) {
            mAlertDialog.setTitle(title);
            mAlertDialog.showContentText(!(msg == null || msg.isEmpty()));
            mAlertDialog.setContentText(msg);
        }
    }

    @Override
    public void setConfirmText(String content) {
        if (mAlertDialog != null && mAlertDialog.isShowing()) {
            mAlertDialog.setConfirmText(content);
        }
    }

    @Override
    public void setCancelText(String content) {
        if (mAlertDialog != null && mAlertDialog.isShowing()) {
            mAlertDialog.setCancelText(content);
        }
    }

    @Override
    public void showCancel(boolean isShow) {
        if (mAlertDialog != null && mAlertDialog.isShowing()) {
            mAlertDialog.setCancelText("取消");
            mAlertDialog.showCancelButton(isShow);
        }
    }

    @Override
    public void showSuccess(String title, String msg, final IDialogClickListener clickListener) {
        if (mAlertDialog != null && mAlertDialog.isShowing()) {
            mAlertDialog.setContentText(msg)
                    .setTitleText(title)
                    .setConfirmText("确定")
                    .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sweetAlertDialog) {
                            clickListener.onClick();
                        }
                    })
                    .showContentText(!(msg == null || msg.isEmpty()))
                    .changeAlertType(SweetAlertDialog.SUCCESS_TYPE);
        } else {
            mAlertDialog = new SweetAlertDialog(mContext, SweetAlertDialog.SUCCESS_TYPE)
                    .setTitleText(title)
                    .setConfirmText("确定")
                    .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sweetAlertDialog) {
                            clickListener.onClick();
                        }
                    })
                    .showContentText(!(msg == null || msg.isEmpty()))
                    .setContentText(msg);
            mAlertDialog.setCancelable(false);
            mAlertDialog.show();
        }
    }

    @Override
    public void showFailed(String title, String msg, final IDialogClickListener clickListener) {
        if (mAlertDialog != null && mAlertDialog.isShowing()) {
            mAlertDialog.setContentText(msg)
                    .setTitleText(title)
                    .showContentText(!(msg == null || msg.isEmpty()))
                    .setConfirmText("确定")
                    .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sweetAlertDialog) {
                            clickListener.onClick();
                        }
                    })
                    .changeAlertType(SweetAlertDialog.ERROR_TYPE);
        } else {
            mAlertDialog = new SweetAlertDialog(mContext, SweetAlertDialog.ERROR_TYPE)
                    .setTitleText(title)
                    .setConfirmText("确定")
                    .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sweetAlertDialog) {
                            clickListener.onClick();
                        }
                    })
                    .showContentText(!(msg == null || msg.isEmpty()))
                    .setContentText(msg);
            mAlertDialog.setCancelable(false);
            mAlertDialog.show();
        }
    }

    @Override
    public void showWarning(String title, String msg, final IDialogClickListener clickListener) {
        if (mAlertDialog != null && mAlertDialog.isShowing()) {
            mAlertDialog.setContentText(msg)
                    .showContentText(!(msg == null || msg.isEmpty()))
                    .setTitleText(title)
                    .setConfirmText("确定")
                    .setCancelText("取消")
                    .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sweetAlertDialog) {
                            clickListener.onClick();
                        }
                    })
                    .changeAlertType(SweetAlertDialog.WARNING_TYPE);
        } else {
            mAlertDialog = new SweetAlertDialog(mContext, SweetAlertDialog.WARNING_TYPE)
                    .setTitleText(title)
                    .setConfirmText("确定")
                    .setCancelText("取消")
                    .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sweetAlertDialog) {
                            clickListener.onClick();
                        }
                    })
                    .setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sweetAlertDialog) {
                            clearDialog();
                        }
                    })
                    .showContentText(!(msg == null || msg.isEmpty()))
                    .setContentText(msg);
            mAlertDialog.setCancelable(false);
            mAlertDialog.show();
        }
    }

    @Override
    public void showWarning(String title, String msg, final IDialogClickListener clickListener, final IDialogClickListener cancelListener) {
        if (mAlertDialog != null && mAlertDialog.isShowing()) {
            mAlertDialog.setContentText(msg)
                    .showContentText(!(msg == null || msg.isEmpty()))
                    .setTitleText(title)
                    .setConfirmText("确定")
                    .setCancelText("取消")
                    .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sweetAlertDialog) {
                            if (clickListener != null) {
                                clickListener.onClick();
                            }
                        }
                    })
                    .setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sweetAlertDialog) {
                            if (cancelListener != null) {
                                cancelListener.onClick();
                            }
                            clearDialog();
                        }
                    })
                    .changeAlertType(SweetAlertDialog.WARNING_TYPE);
        } else {
            mAlertDialog = new SweetAlertDialog(mContext, SweetAlertDialog.WARNING_TYPE)
                    .setTitleText(title)
                    .setConfirmText("确定")
                    .setCancelText("取消")
                    .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sweetAlertDialog) {
                            if (clickListener != null) {
                                clickListener.onClick();
                            }
                        }
                    })
                    .setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sweetAlertDialog) {
                            if (cancelListener != null) {
                                cancelListener.onClick();
                            }
                            clearDialog();
                        }
                    })

                    .showContentText(!(msg == null || msg.isEmpty()))
                    .setContentText(msg);
            mAlertDialog.setCancelable(false);
            mAlertDialog.show();
        }

    }

    @Override
    public void clearDialog() {
        if (mAlertDialog != null && mAlertDialog.isShowing()) {
            mAlertDialog.dismissWithAnimation();
            mAlertDialog = null;
        }
    }

    @Override
    public void stopProgressWithSuccess(String option, String msg,
                                        final IDialogClickListener listener) {
        if (mAlertDialog != null && mAlertDialog.isShowing()) {
            mAlertDialog.setTitleText(option)
                    .showContentText(!(msg == null || msg.isEmpty()))
                    .setContentText(msg)
                    .showCancelButton(false)
                    .setConfirmText("确定")
                    .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sweetAlertDialog) {
                            listener.onClick();
                        }
                    })
                    .changeAlertType(SweetAlertDialog.SUCCESS_TYPE);
        } else {
            mAlertDialog = new SweetAlertDialog(mContext, SweetAlertDialog.SUCCESS_TYPE)
                    .setTitleText(option)
                    .setConfirmText("确定")
                    .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sweetAlertDialog) {
                            listener.onClick();
                        }
                    })
                    .showContentText(!(msg == null || msg.isEmpty()))
                    .setContentText(msg);
            mAlertDialog.setCancelable(false);
            mAlertDialog.show();
        }
    }

    @Override
    public void changeToProgressType(String msg) {
        if (mAlertDialog != null && mAlertDialog.isShowing()) {
            mAlertDialog.setTitleText(msg)
                    .showCancelButton(false)
                    .showContentText(false)
                    .changeAlertType(SweetAlertDialog.PROGRESS_TYPE);
        } else {
            mAlertDialog = new SweetAlertDialog(mContext, SweetAlertDialog.PROGRESS_TYPE)
                    .setTitleText(msg);
            mAlertDialog.setCancelable(true);
            mAlertDialog.show();
        }
    }

    @Override
    public void stopProgressWithFailed(String option, String msg) {
        if (mAlertDialog != null && mAlertDialog.isShowing()) {
            mAlertDialog.setTitleText(option)
                    .showContentText(!(msg == null || msg.isEmpty()))
                    .setContentText(msg)
                    .setConfirmText("确定")
                    .showCancelButton(false)
                    .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sweetAlertDialog) {
                            sweetAlertDialog.dismissWithAnimation();
                        }
                    })
                    .changeAlertType(SweetAlertDialog.ERROR_TYPE);
        } else {
            mAlertDialog = new SweetAlertDialog(mContext, SweetAlertDialog.ERROR_TYPE)
                    .setTitleText(option)
                    .setConfirmText("确定")
                    .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sweetAlertDialog) {
                            sweetAlertDialog.dismissWithAnimation();
                        }
                    })
                    .showContentText(!(msg == null || msg.isEmpty()))
                    .setContentText(msg);
            mAlertDialog.setCancelable(false);
            mAlertDialog.show();
        }
    }

    @Override
    public void stopProgressWithFailed(String option, String msg, final IDialogClickListener listener) {
        if (mAlertDialog != null && mAlertDialog.isShowing()) {
            mAlertDialog.setTitleText(option)
                    .setContentText(msg)
                    .showContentText(!(msg == null || msg.isEmpty()))
                    .setConfirmText("确定")
                    .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sweetAlertDialog) {
                            if (listener != null) {
                                listener.onClick();
                            }
                            sweetAlertDialog.dismissWithAnimation();
                        }
                    })
                    .changeAlertType(SweetAlertDialog.ERROR_TYPE);
        } else {
            mAlertDialog = new SweetAlertDialog(mContext, SweetAlertDialog.ERROR_TYPE)
                    .setTitleText(option)
                    .setConfirmText("确定")
                    .setCancelText("取消")
                    .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sweetAlertDialog) {
                            if (listener != null) {
                                listener.onClick();
                            }
                            sweetAlertDialog.dismissWithAnimation();
                        }
                    })
                    .setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sweetAlertDialog) {
                            clearDialog();
                        }
                    })
                    .setContentText(msg);
            mAlertDialog.setCancelable(true);
            mAlertDialog.show();
        }

    }

    @Override
    public Dialog getDialog() {
        return mAlertDialog;
    }
}
